package com.jdk.demo.thread.exchanger;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Exchanger;

// java.util.concurrent.Exchanger 类表示一种两个线程可以进行互相交换对象的汇合点。
// 两个线程通过一个 Exchanger 交换对象。
// 交换对象的动作由 Exchanger 的两个 exchange() 方法的其中一个完成。
// 简单说就是一个线程在完成一定的事务后想与另一个线程交换数据，则第一个先拿出数据的线程会一直等待第二个线程，直到第二个线程拿着数据到来时才能彼此交换对应数据
public class ExchangerDemo {

	public static void main(String[] args) throws InterruptedException {
		Exchanger<String> exchanger = new Exchanger<>();
		CountDownLatch begin = new CountDownLatch(1);

		ExchangerRunnable exchangerRunnable1 = new ExchangerRunnable(exchanger, "A", null);

		ExchangerRunnable exchangerRunnable2 = new ExchangerRunnable(exchanger, "B", begin);

		new Thread(exchangerRunnable1).start();
		for(int i=0; i<3; i++)
			new Thread(exchangerRunnable2).start();
		Thread.sleep(2000);
		begin.countDown();
	}

}
